/*
 * This code based on Silicon Graphics, Inc.'s redbook
 * http://www.opengl.org/resources/code/samples/redbook/
 */

/*
 * Copyright (C) 2008 aki@akjava.com
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * original code license
 * Copyright (c) 1993-1997, Silicon Graphics, Inc.
 * ALL RIGHTS RESERVED 
 * Permission to use, copy, modify, and distribute this software for 
 * any purpose and without fee is hereby granted, provided that the above
 * copyright notice appear in all copies and that both the copyright notice
 * and this permission notice appear in supporting documentation, and that 
 * the name of Silicon Graphics, Inc. not be used in advertising
 * or publicity pertaining to distribution of the software without specific,
 * written prior permission. 
 *
 * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
 * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
 * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
 * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
 * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
 * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
 * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
 * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
 * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
 * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
 * 
 * US Government Users Restricted Rights 
 * Use, duplication, or disclosure by the Government is subject to
 * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
 * (c)(1)(ii) of the Rights in Technical Data and Computer Software
 * clause at DFARS 252.227-7013 and/or in similar or successor
 * clauses in the FAR or the DOD or NASA FAR Supplement.
 * Unpublished-- rights reserved under the copyright laws of the
 * United States.  Contractor/manufacturer is Silicon Graphics,
 * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
 *
 * OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
 */

package com.akjava.android.openglsamples.redbook;

import java.nio.FloatBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.content.Context;

import com.akjava.android.openglsamples.GLUT;


public class FogRenderer extends RedBookSimpleRenderer {


	public FogRenderer(Context context) {
       super(context);
    }



    public void setUpBuffers() {
    	  
    	   
    }
    

    public void onSurfaceChanged(GL10 gl, int w, int h) {
 	   gl.glViewport(0, 0, w, h);
	   gl.glMatrixMode(GL10.GL_PROJECTION);
	   gl.glLoadIdentity();
	   
	   if (w <= h) 
	      gl.glOrthof(-2.5f, 2.5f, 
	         -2.5f*(float)h/(float)w, 2.5f*(float)h/(float)w,-10,10);
	   else 
		   gl.glOrthof (-2.5f*(float)w/(float)h, 
	    		  2.5f*(float)w/(float)h, -2.5f, 2.5f,-10,10);
	   gl.glMatrixMode(GL10.GL_MODELVIEW);
	   gl.glLoadIdentity();
	   
    }



    public void onDrawFrame(GL10 gl) {
    	 
    	gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    	   renderSphere (gl,-2f, -0.5f, -1.0f);
    	   renderSphere (gl,-1f, -0.5f, -2.0f);
    	   renderSphere (gl,0f, -0.5f, -3.0f);
    	   renderSphere (gl,1f, -0.5f, -4.0f);
    	   renderSphere (gl,2f, -0.5f, -5.0f);
    }


int fogMode;
	@Override
	public void onSurfaceCreated(GL10 gl, EGLConfig config) {setUpBuffers();
		   float position[] = { 0.5f, 0.5f, 3.0f, 0.0f };

		   gl.glEnable(GL10.GL_DEPTH_TEST);

		   gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, FloatBuffer.wrap(position));
		   gl.glEnable(GL10.GL_LIGHTING);
		   gl.glEnable(GL10.GL_LIGHT0);
		   {
			   float mat[] = {0.1745f, 0.01175f, 0.01175f};	
			   gl.glMaterialfv (GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, FloatBuffer.wrap(mat));
		      mat[0] = 0.61424f; mat[1] = 0.04136f; mat[2] = 0.04136f;	
		      gl.glMaterialfv (GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, FloatBuffer.wrap(mat));
		      mat[0] = 0.727811f; mat[1] = 0.626959f; mat[2] = 0.626959f;
		      gl.glMaterialfv (GL10.GL_FRONT_AND_BACK, GL10.GL_SPECULAR, FloatBuffer.wrap(mat));
		      gl.glMaterialf (GL10.GL_FRONT_AND_BACK, GL10.GL_SHININESS, 0.6f*128.0f);
		   }

		   gl.glEnable(GL10.GL_FOG);
		   {
			   float fogColor[] = {0.5f, 0.5f, 0.5f, 1.0f};

		      fogMode = GL10.GL_EXP;
		      //gl.glFogi (GL10.GL_FOG_MODE, fogMode);
		      gl.glFogx (GL10.GL_FOG_MODE, fogMode);
		      gl.glFogfv (GL10.GL_FOG_COLOR, FloatBuffer.wrap(fogColor));
		      gl.glFogf (GL10.GL_FOG_DENSITY, 0.35f);
		      gl.glHint (GL10.GL_FOG_HINT, GL10.GL_DONT_CARE);
		      gl.glFogf (GL10.GL_FOG_START, 1.0f);
		      gl.glFogf (GL10.GL_FOG_END, 5.0f);
		   }
		   gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);  /* fog color */
	}


	 void renderSphere (GL10 gl,float x, float y, float z)
	{
	   gl.glPushMatrix();
	   gl.glTranslatef (x, y, z);
	   
	   GLUT.glutSolidTorus(gl, 0.1f, 0.2f, 12, 12) ;
	   gl.glPopMatrix();
	}
	


	
}


